//声明权限树
function fillAuthTree(){
	
	var resultJSON = $.ajax({
		"url":"assign/get/all/auth.json",
		"type":"post",
		"dataType":"json",
		"async":false
	});
	if(resultJSON.status!=200){
		layer.msg("操作错误！错误码："+resultJSON.status+" 错误描述："+resultJSON.statusText);
		return ;
	}
	//获取权限数据
	var authList = resultJSON.responseJSON.data;
	
	var setting={
			data: {
				simpleData: {
					enable:true,
					pIdKey: "categoryId"
				},
				key: {
					name: "title"
				}
			},
			check: {
				enable: true,
				chkStyle: "checkbox"
			}
	};
	$.fn.zTree.init($("#authTreeDemo"),setting,authList);
	//获得ZTreeObj
	var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
	//展开所有节点
	zTreeObj.expandAll(true);
	
	//5.查询已分配的 Auth 的 id 组成的数组
	var ajaxReturn=$.ajax({ 
		"url":"assign/get/assigned/auth/id/by/role/id.json", 
		"type":"post", 
		"data":{ 
			"roleId":window.roleId 
			}, 
		"dataType":"json",
		"async":false
	});
	if(ajaxReturn.status!=200){ 
		layer.msg("请 求 处 理 出错 ！ 响 应 状 态 码 是 ："+ajaxReturn.status+" 说 明 是 ： "+ajaxReturn.statusText); 
		return; 
		}
	// 从响应结果中获取 authIdArray 
	var authIdArray=ajaxReturn.responseJSON.data;
	//6.根据 authIdArray 把树形结构中对应的节点勾选上 
	// ①遍历 authIdArray 
	for(var i=0;i<authIdArray.length;i++){ 
		var authId=authIdArray[i];
		// ②根据 id 查询树形结构中对应的节点
		var treeNode=zTreeObj.getNodeByParam("id",authId);
		// ③将 treeNode 设置为被勾选
		//checked 设置为 true 表示节点勾选 
		var checked=true;
		//checkTypeFlag 设置为 false，表示不“联动”，不联动是为了避免把不该勾选的勾选上
		var checkTypeFlag=false;
		// 执行 
		zTreeObj.checkNode(treeNode,checked,checkTypeFlag);
	}
	
	//分配权限
	$("#assignBtn").click(function(){
		var authIdarray=[];
		//获取zTreeObj
		var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
		//获取勾选的节点
		var checkNodes = zTreeObj.getCheckedNodes(true);
		//遍历节点，并且把节点放入数组中
		for(var i = 0; i<checkNodes.length;i++){
			var authId = checkNodes[i].id;
			authIdarray.push(authId);
		}
		//请求参数
		var requestBody = {
				"roleId":[window.roleId],
				"authIdarray":authIdarray
		};
		//转换为json
		requestBody = JSON.stringify(requestBody);
		//发送请求
		$.ajax({
			"url":"assign/do/role/assign/auth.json",
			"type":"post",
			"data":requestBody,
			"dataType":"json",
			"contentType":"application/json;charset=UTF-8",
			"success":function(response){ varresult=response.result; if(result=="SUCCESS"){ layer.msg("操作成功！"); } if(result=="FAILED"){ layer.msg("操作失败！"+response.message); } }, "error":function(response){ layer.msg(response.status+""+response.statusText); }

		});
		$("#assignModal").modal("hide");
		
	});
}


// 声明专门的函数显示确认模态框
function showConfirmModal(roleArray) {
	
	// 打开模态框
	$("#confirmModal").modal("show");
	
	// 清除旧的数据
	$("#roleNameDiv").empty();
	
	// 在全局变量范围创建数组用来存放角色id
	window.roleIdArray = [];
	
	// 遍历roleArray数组
	for(var i = 0; i < roleArray.length; i++) {
		var role = roleArray[i];
		var roleName = role.roleName;
		$("#roleNameDiv").append(roleName+"<br/>");
		
		var roleId = role.roleId;
		
		// 调用数组对象的push()方法存入新元素
		window.roleIdArray.push(roleId);
	}
	
}

// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage() {
	
	// 1.获取分页数据
	var pageInfo = getPageInfoRemote();
	
	// 2.填充表格
	fillTableBody(pageInfo);
	
}

// 远程访问服务器端程序获取pageInfo数据
function getPageInfoRemote() {
	
	// 调用$.ajax()函数发送请求并接受$.ajax()函数的返回值
	var ajaxResult = $.ajax({
		"url": "role/get/page/info.json",
		"type":"post",
		"data": {
			"pageNum": window.pageNum,
			"pageSize": window.pageSize,
			"keyword": window.keyword
		},
		"async":false,
		"dataType":"json"
	});
	
	console.log(ajaxResult);
	
	// 判断当前响应状态码是否为200
	var statusCode = ajaxResult.status;
	
	// 如果当前响应状态码不是200，说明发生了错误或其他意外情况，显示提示消息，让当前函数停止执行
	if(statusCode != 200) {
		layer.msg("失败！响应状态码="+statusCode+" 说明信息="+ajaxResult.statusText);
		return null;
	}
	
	// 如果响应状态码是200，说明请求处理成功，获取pageInfo
	var resultEntity = ajaxResult.responseJSON;
	
	// 从resultEntity中获取result属性
	var result = resultEntity.result;
	
	// 判断result是否成功
	if(result == "FAILED") {
		layer.msg(resultEntity.message);
		return null;
	}
	
	// 确认result为成功后获取pageInfo
	var pageInfo = resultEntity.data;
	
	// 返回pageInfo
	return pageInfo;
}

// 填充表格
function fillTableBody(pageInfo) {
	
	// 清除tbody中的旧的内容
	$("#rolePageBody").empty();
	
	// 这里清空是为了让没有搜索结果时不显示页码导航条
	$("#Pagination").empty();
	
	// 判断pageInfo对象是否有效
	if(pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0) {
		$("#rolePageBody").append("<tr><td colspan='4' align='center'>抱歉！没有查询到您搜索的数据！</td></tr>");
		
		return ;
	}
	
	// 使用pageInfo的list属性填充tbody
	for(var i = 0; i < pageInfo.list.length; i++) {
		
		var role = pageInfo.list[i];
		
		var roleId = role.id;
		
		var roleName = role.name;
		
		var numberTd = "<td>"+(i+1)+"</td>";
		var checkboxTd = "<td><input id='"+roleId+"' class='itemBox' type='checkbox'></td>";
		var roleNameTd = "<td>"+roleName+"</td>";
		
		var check2Btn = "<button id='"+roleId+"' type='button' class='btn btn-success btn-xs check2Btn'><i class=' glyphicon glyphicon-check'>分配权限</i></button>";
		
		var checkBtn = "<button id='"+roleId+"' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-search'>查看</i></button>";
		//security标签
		var securityStartTag = "<security:authorize access='hasRole('角色经理')'>";
		// 通过button标签的id属性（别的属性其实也可以）把roleId值传递到button按钮的单击响应函数中，在单击响应函数中使用this.id
		var pencilBtn = "<button id='"+roleId+"' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'>编辑</i></button>";
		
		// 通过button标签的id属性（别的属性其实也可以）把roleId值传递到button按钮的单击响应函数中，在单击响应函数中使用this.id
		var removeBtn = "<button id='"+roleId+"' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'>删除</i></button>";
		
		var sercurtEndTag = "</security:authorize>";
		
		var buttonTd = "<td>"+check2Btn+" "+checkBtn+" "+securityStartTag+pencilBtn+" "+removeBtn+sercurtEndTag+"</td>";
		
		var tr = "<tr>"+numberTd+checkboxTd+roleNameTd+buttonTd+"</tr>";
		
		$("#rolePageBody").append(tr);
	}
	
	// 生成分页导航条
	generateNavigator(pageInfo);
}

// 生成分页页码导航条
function generateNavigator(pageInfo) {
	
	// 获取总记录数
	var totalRecord = pageInfo.total;
	
	// 声明相关属性
	var properties = {
		"num_edge_entries": 3,
		"num_display_entries": 5,
		"callback": paginationCallBack,
		"items_per_page": pageInfo.pageSize,
		"current_page": pageInfo.pageNum - 1,
		"prev_text": "上一页",
		"next_text": "下一页"
	}
	
	// 调用pagination()函数
	$("#Pagination").pagination(totalRecord, properties);
}

// 翻页时的回调函数
function paginationCallBack(pageIndex, jQuery) {
	
	// 修改window对象的pageNum属性
	window.pageNum = pageIndex + 1;
	
	// 调用分页函数
	generatePage();
	
	// 取消页码超链接的默认行为
	return false;
	
}